﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Model;
using DL;


namespace BL
{
    public class TekenAgenda
    {
        public Table StartDrawing(DateTime date, int Afspraakduur, int ID, bool logedin, int PraktijkID)
        {
            Table Agenda = new Table();

            TableRow Rij = new TableRow();

            #region bovenste rij met data en dagen van de week....
            // bovenste rij met data en dagen van de week....
            for (int i = -1; i < 7; i++)
            {
                TableCell Cell = new TableCell();
                if (i == -1)
                {
                    Cell.Text = "Uur";
                }
                else
                {
                    TekenAgenda DagNaam = new TekenAgenda();
                    List<TekenAgenda> NaamDag = DagNaam.Nederlands();

                    int dag = (int)date.AddDays(i).DayOfWeek;
                    string datum = date.AddDays(i).ToShortDateString();

                    Cell.Text = NaamDag[dag].Naam.ToString() + " " + datum;
                }

                Rij.Cells.Add(Cell);
            }
            Agenda.Rows.Add(Rij);

            #endregion

            #region Beschikbaarheid ophalen

            DataModelManager Beschikbaar = new DataModelManager();
            List<BeschikbaarheidArtsen> BeschikbaarheidsLijst = Beschikbaar.getBeschikbaarheid(ID);

            //maak lijstje met starttijden om er het kleinste uit te halen
            //maak lijst met stoptijden om het grootste eruit te halen

            List<DateTime> StartTijden = new List<DateTime>();
            List<DateTime> StopTijden = new List<DateTime>();

            string niks = "0:00";
            DateTime Smallest = DateTime.Parse(niks);
            DateTime Largest = DateTime.Parse(niks);

            if (BeschikbaarheidsLijst.Count != 0)
            {
                foreach (BeschikbaarheidArtsen Item in BeschikbaarheidsLijst)
                {
                    StartTijden.Add(DateTime.Parse(Item.StartUur.ToString()));
                }
                Smallest = StartTijden.Min();

                foreach (BeschikbaarheidArtsen Item in BeschikbaarheidsLijst)
                {
                    StopTijden.Add(DateTime.Parse(Item.EindUur.ToString()));
                }
                Largest = StopTijden.Max();
            }
            #endregion


            #region Checken of een login nodig is
            // is er een login nodig voor deze dokter?

            DataModelManager LogIn = new DataModelManager();

            List<Artsen> LoginInfo = LogIn.getArtsInfo(ID);
            bool LoginRequired = false;  //declaratie van bool

            if (LoginInfo.Count != 0)
            {
                foreach (Artsen Dok in LoginInfo)
                {
                    LoginRequired = Dok.LoginVereist;
                }
            }
            
            #endregion


            #region Rest van de agenda uittekenen volgens de gestelde voorwaarden
            //rest van de agenda uittekenen

            while (Smallest < Largest)
            {
                TableRow VolgendeRij = new TableRow();

                for (int t = -1; t < 7; t++)
                {
                    TableCell VolgendeCell = new TableCell();
                    if (t == -1)
                    {
                        VolgendeCell.Text = Smallest.ToShortTimeString();  //vul de uren in telkens in de eerste cell van een nieuwe rij
                    }
                    else
                    {
                        // dit is een stuk code hetwelke ik niet weet waar te zetten!!!!
                        //hier moeten we nagaan of een cel al dan niet een link moet krijgen en of die link naar een login moet lijden of niet...
                        CheckAvailability NuBeschikbaar = new CheckAvailability();

                        string Action = NuBeschikbaar.BeschikbaarheidPerDatumEnUur(date.AddDays(t), Smallest.ToShortTimeString(), LoginRequired, ID, logedin);

                        switch (Action)
                        {
                            case "leeg":
                                //lege cell achterlaten
                                VolgendeCell.BackColor = System.Drawing.Color.LightGray;
                                //VolgendeCell.CssClass = "gray";
                                break;
                            case "login":
                                //navigeren naar een login scherm
                                LinkButton LinkToLogin = new LinkButton();
                                LinkToLogin.Text = "Login";
                                LinkToLogin.PostBackUrl = "PatientLogin.aspx?ID=" + ID + "&PID=" + PraktijkID;
                                VolgendeCell.Controls.Add(LinkToLogin);
                                //VolgendeCell.CssClass = "green";  //later in css file kan de achtergrond groen gekleurd worden
                                VolgendeCell.BackColor = System.Drawing.Color.LightGreen;
                                break;
                            case "form":
                                //navigeren naar een afsprakenform
                                LinkButton LinkToForm = new LinkButton();
                                LinkToForm.Text = "Boek afspraak";
                                LinkToForm.PostBackUrl = "PatientAfspraakAanmaak.aspx?datum=" + date.AddDays(t).ToShortDateString() + "&uur=" + Smallest.ToShortTimeString() + "&ArtsID=" + ID;
                                VolgendeCell.Controls.Add(LinkToForm);
                                //VolgendeCell.CssClass = "green";
                                VolgendeCell.BackColor = System.Drawing.Color.LightGreen;
                                break;
                        }
                    }
                    VolgendeRij.Cells.Add(VolgendeCell);
                }
                Agenda.Rows.Add(VolgendeRij);
                Smallest = Smallest.AddMinutes(Afspraakduur);
            }
            return Agenda;
        }
            #endregion

        #region Nederlandse vertaling van de dagen
        private string naam;

        public string Naam
        {
            get { return naam; }
            set { naam = value; }
        }


        public List<TekenAgenda> Nederlands()
        {
            List<TekenAgenda> ned = new List<TekenAgenda>();
            TekenAgenda dag0 = new TekenAgenda();
            dag0.Naam = "Zondag";
            ned.Add(dag0);

            TekenAgenda dag1 = new TekenAgenda();
            dag1.Naam = "Maandag";
            ned.Add(dag1);

            TekenAgenda dag2 = new TekenAgenda();
            dag2.Naam = "Dinsdag";
            ned.Add(dag2);

            TekenAgenda dag3 = new TekenAgenda();
            dag3.Naam = "Woensdag";
            ned.Add(dag3);

            TekenAgenda dag4 = new TekenAgenda();
            dag4.Naam = "Donderdag";
            ned.Add(dag4);

            TekenAgenda dag5 = new TekenAgenda();
            dag5.Naam = "Vrijdag";
            ned.Add(dag5);

            TekenAgenda dag6 = new TekenAgenda();
            dag6.Naam = "Zaterdag";
            ned.Add(dag6);

            return ned;
        }
        #endregion

    }
}
